«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Принципы SOLID с использованием забавных аналогий с примером транспортного средства.

Принципы SOLID с использованием забавных аналогий с примером транспортного средства.

Опубликовано 6 ноября 2024 г.
Просматривать:940

SOLID principles using some fun analogies with Vehicle Example

SOLID — это аббревиатура, обозначающая группу из пяти хороших принципов (правил) компьютерного программирования. SOLID позволяет программистам писать код, который легче понять и изменить в дальнейшем. SOLID часто используется с системами, использующими объектно-ориентированный дизайн.
Давайте объясним принципы SOLID на примере транспортного средства. Представьте, что мы разрабатываем систему управления различными типами транспортных средств, например автомобилями и электромобилями, для транспортных услуг.

S - Принцип единой ответственности (SRP)

Пример транспортного средства: Представьте, что у вас есть машина. Он отвечает за вождение, но не должен отвечать за собственное техническое обслуживание (например, замену масла или замену шин). Вместо этого за это отвечает отдельный механик.
Объяснение: В нашем коде класс Vehicle должен обрабатывать только вещи, связанные с самим транспортным средством, например хранить его марку и модель. Если нам нужно управлять обслуживанием, мы создаем для этого отдельный класс обслуживания. Таким образом, у каждого класса есть одна задача или ответственность, что упрощает управление кодом.

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end
end

class Maintenance
  def initialize(vehicle)
    @vehicle = vehicle
  end

  def perform_maintenance
    puts "Performing maintenance on #{@vehicle.make} #{@vehicle.model}"
  end
end

O - Принцип открытия/закрытия (OCP)

Пример транспортного средства: Предположим, у вас есть базовый автомобиль, и теперь вы хотите добавить в свою систему электромобиль. Вам не нужно изменять существующий класс автомобилей, чтобы добавить функции для электромобилей. Вместо этого вы можете расширить существующий функционал, создав новый класс электромобилей.
Объяснение: Класс Vehicle открыт для расширения (вы можете создавать новые типы транспортных средств, например, ElectricVehicle), но закрыт для модификации (вам не нужно изменять сам класс Vehicle, чтобы добавлять новые типы).

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def description
    "#{@make} #{@model}"
  end
end

class ElectricVehicle 





L - Принцип замены Лискова (LSP)

Пример транспортного средства: Представьте, что у вас есть автопарк, и вы можете без проблем заменить любой обычный автомобиль на электромобиль. Оба должны иметь возможность выполнять свою основную функцию - вождение - не нарушая систему.
Объяснение: Любой подкласс (например, ElectricVehicle) должен иметь возможность заменять свой родительский класс (Vehicle) без изменения поведения программы. Это гарантирует, что наш код сможет одинаково обрабатывать разные типы транспортных средств.

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class ElectricVehicle 





I - Принцип разделения интерфейсов (ISP)

Пример транспортного средства: Представьте, что у вас есть разные типы транспортных средств: некоторые можно заряжать (например, электромобили), а некоторые можно только водить (например, бензиновые автомобили). Вы не хотите, чтобы бензиновому автомобилю приходилось сталкиваться с методами зарядки.
Объяснение: Классы должны реализовывать только те интерфейсы (или поведение), которые им необходимы. Например, электрический автомобиль может реализовывать интерфейсы как Drivable, так и Chargeable, тогда как обычный автомобиль реализует только Drivable.

module Drivable
  def drive
    raise NotImplementedError, "This #{self.class} cannot drive"
  end
end

module Chargeable
  def charge
    raise NotImplementedError, "This #{self.class} cannot be charged"
  end
end

class Vehicle
  include Drivable

  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class ElectricVehicle 





D - Принцип инверсии зависимостей (DIP)

Пример транспортного средства: Представьте, что у автомобиля могут быть разные типы двигателей: газовый или электрический. Вместо того, чтобы напрямую зависеть от конкретного типа двигателя, автомобиль должен зависеть от более общего интерфейса двигателя, чтобы он мог использовать любой тип двигателя.
Объяснение: Модули высокого уровня (например, Транспортное средство) не должны зависеть от модулей низкого уровня (например, GasEngine или ElectricEngine). Оба должны зависеть от абстракций (например, интерфейса Engine). Это делает систему более гибкой и простой в изменении.

class Engine
  def start
    raise NotImplementedError, "This #{self.class} cannot start"
  end
end

class GasEngine 



Следуя принципам SOLID в этом примере с автомобилем, мы можем создать систему, которую легко обслуживать, расширять и адаптировать к новым требованиям.

LinkedIn: https://www.linkedin.com/in/anandsoni11/

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/sonianand11/solid-principles-using-some-fun-analogies-with-vehicle-example-34p7?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3